﻿//(c) Copyright [2015] Hewlett-Packard Enterprise Development, L.P.
//All rights reserved.
//Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
//2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
//THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 
//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
//OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using HP.HPTRIM.SDK;
using ServiceStack.Common.Web;
using System;
using System.Drawing;
using System.Linq;

namespace HP.HPTRIM.Samples.Thumbnails
{
    /// <summary>
    /// This is the ServiceAPI plugin to return a thumbnail for an image.  If there is a thumbnail rendition that is returned otherwise one is generated on the fly.
    /// </summary>
    public class ThumbnailViewService : HP.HPTRIM.Service.TrimServiceBase
    {
        private static string[] supportedExtensions = new string[] { "png", "gif", "jpg", "jpeg" };

        private TempFile getFile(Record record)
        {
            foreach (RecordRendition rendition in record.ChildRenditions)
            {
                if (rendition.TypeOfRendition == RenditionType.Other1)
                {
                    return new TempFile(rendition);
                }
            }
            return new TempFile(record);
           
        }
        public object Get(ThumbnailView request)
        {
            Record record = this.Database.FindTrimObjectByUri(BaseObjectTypes.Record, request.Uri) as Record;

            if (record != null)
            {
                if (supportedExtensions.Any(ext => string.Equals(ext, record.Extension, StringComparison.CurrentCultureIgnoreCase)))
                {

                    using (TempFile recordFile = getFile(record))
                    {
                        if (recordFile.FileExists)
                        {
                            ThumbnailGenerator generator = new ThumbnailGenerator(recordFile.FilePath, record.SuggestedFileName);
                            return new HttpResult(generator.GetThumbnail(), record.MimeType);
                        }
                    }
                }
            }

            ImageConverter converter = new ImageConverter();

            byte[] bytes = (byte[])converter.ConvertTo(resources.no_image, typeof(byte[]));

            return new HttpResult(bytes, "image/png");


        }
    }
}
